package com.filldream.fastboot.common.util;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

/**
 * @author RickSun
 * @Description 加解密工具类
 **/
public class EncryptUtil {

	/**
	 * @author RickSun
	 * @Description AES解密
	 * @param base64Data 待解密数据
	 * @param password 需要MD5加密的key
	 * @param padding padding方式
	 * @param algorithm 算法规则
	 **/
	public static String decryptData(String base64Data,String password,String padding,String algorithm) throws Exception {
		Cipher cipher = Cipher.getInstance(padding);
		SecretKeySpec key = new SecretKeySpec(EncryptUtil.md5Encode(password).toLowerCase().getBytes(), algorithm);
		cipher.init(Cipher.DECRYPT_MODE, key);
		byte[] decode = Base64.decodeBase64(base64Data);
		byte[] doFinal = cipher.doFinal(decode);
		return new String(doFinal,"utf-8");
	}
	
	/**
	 * Base64加密        无Key
	 * @param content
	 * @return
	 */
	public static String base64Encode(String content) {
		return Base64.encodeBase64String(content.getBytes());
	}
	
	/**
	 * Base64加密        带Key
	 * @param content
	 * @param key
	 * @return
	 */
	public static String base64Encode(String content, String key) {
		if (StringUtils.isNotBlank(key)) {
			content = content + key;
		}
		return base64Encode(content);
	}
	
	
	/**
	 *  Base64解密       无Key
	 * @param content
	 * @return
	 */
	public static String base64Decode(String content) {
		return new String(Base64.decodeBase64(content));
	}
	
	/**
	 * base64解密             有key
	 * @param content
	 * @param key
	 * @param base64
	 * @return
	 */
	public static boolean base64Decode(String content, String key, String base64) {
        String myBase64 = base64Encode(content, key);
        if (myBase64.equals(base64)) {
            return true;
        } else {
            return false;
        }
	}
	
	/**
	 * 生成uuid
	 * @return
	 */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }
    
    /**
     * Md5加密        无key
     * @param content
     * @return
     */
    public static String md5Encode(String content) {
		return DigestUtils.md5Hex(content);
	}
    
    /**
     * Md5加密        带key
     * @param content
     * @param key
     * @return
     */
    public static String md5Encode(String content, String key) {
    	if (StringUtils.isNotBlank(key)) {
    		content = content + key;
		}
        return DigestUtils.md5Hex(content);
    }

    /**
     * Md5解密	无Key
     * @param text 需要签名的字符串
     * @param sign 签名结果
     * @return 校验结果
     */
    public static boolean md5Verify(String text, String sign) {
    	return md5Verify(text, null, sign);
    }
    
    /**
     * Md5解密	带Key
     * @param text 需要签名的字符串
     * @param sign 签名结果
     * @param key 密钥
     * @return 校验结果
     */
    public static boolean md5Verify(String text, String key, String sign) {
        String mySign = md5Encode(text, key);
        if (mySign.equalsIgnoreCase(sign)) {
            return true;
        } else {
            return false;
        }
    }
    

}

